#include <QCoreApplication>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlError>
#include <QtSql/QSqlQuery>
#include <QDebug>
#include <QSettings>

bool connectToDatabase(QSqlDatabase& db) {
    QSettings settings("config.ini", QSettings::IniFormat);
    QString hostName = settings.value("database/hostname").toString();
    QString userName = settings.value("database/username").toString();
    QString password = settings.value("database/password").toString();
    QString databaseName = settings.value("database/databasename").toString();
    db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName(hostName);
    db.setUserName(userName);
    db.setPassword(password);
    db.setDatabaseName(databaseName);

    if (!db.open()) {
        qDebug() << "无法连接到数据库:" << db.lastError().text();
                                                   return false;
    } else {
        qDebug() << "成功连接到数据库";
        return true;
    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QSqlDatabase db;
    if (!connectToDatabase(db)) {
        return -1;
    }
    QSqlQuery query(db);

    // 检查数据是否已经存在
    if (query.exec("SELECT * FROM mytable WHERE id = 1")) {
        if (query.next()) {
            qDebug() << "数据已经存在";
            return 0;
        }
    } else {
        qDebug() << "查询数据失败:" << query.lastError().text();
                                                 db.rollback();
        return -1;
    }

    // 开始一个事务
    if (!db.transaction()) {
        qDebug() << "无法开始事务:" << db.lastError().text();
                                             return -1;
    }

    // 执行 SQL 语句
    if (query.exec("INSERT INTO mytable (id, name) VALUES (1, 'Alice')")) {
        qDebug() << "插入了数据";
    } else {
        qDebug() << "插入数据失败:" << query.lastError().text();
                                                 db.rollback();
        return -1;
    }

    // 提交事务
    if (!db.commit()) {
        qDebug() << "无法提交事务:" << db.lastError().text();
        return -1;
    }

    // 检查数据是否存在
    if (query.exec("SELECT * FROM mytable WHERE id = 1")) {
        if (query.next()) {
            qDebug() << "数据仍然存在";
        } else {
            qDebug() << "数据不存在";
        }
    } else {
        qDebug() << "查询数据失败:" << query.lastError().text();
                                                 db.rollback();
        return -1;
    }

    return 0;
}
